home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / sdi / walkmenu.h < prev    next >
Encoding:
C/C++ Source or Header  |  1987-06-18  |  4.1 KB  |  128 lines

  1. /*    @(#)walkmenu_impl.h 1.1 86/02/04 SMI    */
  2.  
  3. /***********************************************************************/
  4. /*                          walkmenu_impl.h                   */
  5. /*          Copyright (c) 1985 by Sun Microsystems, Inc.               */
  6. /***********************************************************************/
  7.  
  8. #ifndef walkmenu_impl_DEFINED
  9. #define walkmenu_impl_DEFINED
  10.  
  11. #include <suntool/walkmenu.h>
  12. #include "image_impl.h"
  13.  
  14. #define TRUE    1
  15. #define FALSE    0
  16. #define NULL    0
  17.  
  18. #define Pkg_private
  19. #define Pkg_extern extern
  20. #define Private static
  21.  
  22. #define imax(a, b) ((int)(b) > (int)(a) ? (int)(b) : (int)(a))
  23. #define range(v, min, max) ((v) >= (min) && (v) <= (max))
  24.  
  25. #define menu_attr_next(attr) (Menu_attribute *)attr_next((caddr_t *)attr)
  26. #define MENU_FILLER 5
  27.  
  28. /***********************************************************************/
  29. /*                Structures                        */
  30. /***********************************************************************/
  31.  
  32. /* 
  33.  * Fields: default_position, selected_position and image are not validated
  34.  * and must be checked before each usage.
  35.  */
  36.  
  37. /***********            Menu                 **********/
  38.  
  39. struct menu {
  40.     struct menu_ops_vector *ops;
  41.     int             default_position;      /* Default item */
  42.     int             selected_position;      /* Last selected item */
  43.     /* Values are: default, selected, nth item                 */
  44.     Menu_attribute     initial_selection;  /* Initial presentation */
  45.     Menu_attribute     default_selection;  /* Default presentation */
  46.     int             height;      /* in pixels, zero implies best fit */
  47.     int             width;          /* in pixels */
  48.     struct pixrect    *shadow_pr;      /* Draw shadow with this pattern */
  49.     int             (*feedback_proc)(); /* NYI */
  50.     caddr_t         (*notify_proc)();
  51.     struct menu        *(*gen_proc)();   /* Dynamically generate menu */
  52.     /* Handler for item select,  calls menu item proc */
  53.     struct image     default_image;      /* Font, max size, etc. */
  54.     struct menu        *stack_menu;      /* NYI - Stacking menu (sibling) */
  55.     int             pullright_delta; /* Distance(pixels) to bring up menu*/
  56.     caddr_t         client_data;      /* Client''s use */
  57.  
  58. /* Flags */
  59.     unsigned         allow_accelerated_selection:1; /* NYI */
  60.     unsigned         display_one_level:1; /* Limit initial selection */
  61.     unsigned         stand_off:1;          /* Don''t selected item */
  62.     unsigned         valid_result:1;      /* True if m->value is valid */
  63.     unsigned         jump_after_selection:1; /* If true then jump */
  64.     unsigned         jump_after_no_selection:1; /* If true then jump */
  65.     unsigned         free_everything:1;   /* Not used */
  66.     unsigned         free_menu:1;         /* Not used */
  67.     unsigned         free_shadow_pr:1;    /* Not used */
  68.     unsigned         free_client_data:1;  /* Not used */
  69.  
  70. /* Auxiliary fields */
  71.     int             nitems;      /* Number of items */
  72.     int             max_nitems;      /* Size of item list */
  73.     int             ncols;
  74.     int             nrows;
  75.     struct menu_item    **item_list;
  76.     struct menu_info    *dynamic_info;      /* Holds dynamic info for show() */
  77.     struct menu_item    *parent;      /* Last pullright item */
  78.  
  79.  
  80.  
  81. };
  82.  
  83.  
  84. /***********            Menu item            **********/
  85.  
  86. struct menu_item {
  87.     struct menu_ops_vector *ops;
  88.     struct image    *image;
  89.     struct menu_item    *(*gen_proc)();        /* Called before displaying item */
  90.     struct menu        *(*gen_pullright)();/* Called before displaying menu */
  91.     caddr_t         (*notify_proc)();  /* Called only when selected */
  92.     caddr_t         value;            /* union: value, menu_ptr */
  93.     caddr_t         client_data;
  94.     struct menu        *parent;        /* Current enclosing menu */
  95.  
  96. /* Flags  */
  97.     unsigned         inactive:1;
  98.     unsigned         no_feedback:1;
  99.     unsigned         pullright:1;
  100.     unsigned         selected:1;
  101.     unsigned         free_everything:1;   /* Not used */
  102.     unsigned         free_item:1;
  103.     unsigned         free_value:1;        /* Not used */
  104.     unsigned         free_client_data:1;  /* Not used */
  105.  
  106. };
  107.  
  108.  
  109. /***********            Menu ops            **********/
  110.  
  111. struct menu_ops_vector {
  112.     caddr_t (*menu_get_op)();
  113.     int (*menu_set_op)();
  114.     void (*menu_destroy_op)();
  115. };
  116.  
  117.  
  118. /***********            Menu info            **********/
  119.  
  120. struct menu_info {
  121.     struct inputevent    *first_iep;
  122.     struct inputevent    *last_iep;
  123.     int             depth;
  124.     caddr_t         (*notify_proc)();
  125. };
  126.  
  127. #endif ~walkmenu_impl_DEFINED
  128.